home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 4 / QRZ Ham Radio Callsign Database - Volume 4.iso / files / dsp / 56ktools / dspkgctr.z / dspkgctr / gcc / real.h < prev    next >
C/C++ Source or Header  |  1992-06-08  |  3KB  |  98 lines

  1. /* $Id: real.h,v 1.2 91/10/23 16:49:16 pete Exp $ */
  2. /* Front-end tree definitions for GNU compiler.
  3.    Copyright (C) 1989 Free Software Foundation, Inc.
  4.  
  5. This file is part of GNU CC.
  6.  
  7. GNU CC is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 1, or (at your option)
  10. any later version.
  11.  
  12. GNU CC is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GNU CC; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21. #ifndef REAL_H_INCLUDED
  22. #define REAL_H_INCLUDED
  23.  
  24. /* If we are not cross-compiling, use a `double' to represent the
  25.    floating-point value.  Otherwise, use some other type
  26.    (probably a struct containing an array of longs).  */
  27. #ifndef REAL_VALUE_TYPE
  28. #define REAL_VALUE_TYPE double
  29. #else
  30. #define REAL_IS_NOT_DOUBLE
  31. #endif
  32.  
  33. /* Compare two floating-point values for equality.  */
  34. #ifndef REAL_VALUES_EQUAL
  35. #define REAL_VALUES_EQUAL(x,y) ((x) == (y))
  36. #endif
  37.  
  38. /* Compare two floating-point values for less than.  */
  39. #ifndef REAL_VALUES_LESS
  40. #define REAL_VALUES_LESS(x,y) ((x) < (y))
  41. #endif
  42.  
  43. /* Scale X by Y powers of 2.  */
  44. #ifndef REAL_VALUE_LDEXP
  45. #define REAL_VALUE_LDEXP(x,y) ldexp (x, y)
  46. extern double ldexp ();
  47. #endif
  48.  
  49. /* Convert the string X to a floating-point value.  */
  50. #ifndef REAL_VALUE_ATOF
  51. #define REAL_VALUE_ATOF(x) atof (x)
  52. #if ! defined( _MSDOS )
  53. extern double atof ();
  54. #endif
  55. #endif
  56.  
  57. /* Negate the floating-point value X.  */
  58. #ifndef REAL_VALUE_NEGATE
  59. #define REAL_VALUE_NEGATE(x) (- (x))
  60. #endif
  61.  
  62. /* Truncate the floating-point value X to single-precision.  */
  63. #ifndef REAL_VALUE_TRUNCATE
  64. #define REAL_VALUE_TRUNCATE(x) ((float) (x))
  65. #endif
  66.  
  67. /* Union type used for extracting real values from CONST_DOUBLEs
  68.    or putting them in.  */
  69.  
  70. union real_extract 
  71. {
  72.   REAL_VALUE_TYPE d;
  73.   int i[sizeof (REAL_VALUE_TYPE) / sizeof (int)];
  74. };
  75.  
  76. /* For a CONST_DOUBLE:
  77.    The usual two ints that hold the value.
  78.    For a DImode, that is all there are;
  79.     and CONST_DOUBLE_LOW is the low-order word and ..._HIGH the high-order.
  80.    For a float, the number of ints varies,
  81.     and CONST_DOUBLE_LOW is the one that should come first *in memory*.
  82.     So use &CONST_DOUBLE_LOW(r) as the address of an array of ints.  */
  83. #define CONST_DOUBLE_LOW(r) XINT (r, 2)
  84. #define CONST_DOUBLE_HIGH(r) XINT (r, 3)
  85.  
  86. /* Link for chain of all CONST_DOUBLEs in use in current function.  */
  87. #define CONST_DOUBLE_CHAIN(r) XEXP (r, 1)
  88. /* The MEM which represents this CONST_DOUBLE's value in memory,
  89.    or const0_rtx if no MEM has been made for it yet,
  90.    or cc0_rtx if it is not on the chain.  */
  91. #define CONST_DOUBLE_MEM(r) XEXP (r, 0)
  92.  
  93. /* Function to return a real value (not a tree node)
  94.    from a given integer constant.  */
  95. REAL_VALUE_TYPE real_value_from_int_cst ();
  96.  
  97. #endif /* Not REAL_H_INCLUDED */
  98.